//
//  main.swift
//  swift-curring
//
//  Created by liuj on 16/7/2.
//  Copyright © 2016年 liuj. All rights reserved.
//

import Foundation

print("Hello, World!")

let addFun = Calculator().add(5)

let num = addFun(6)

Calculator().add(5)(5)

print("\(num)")

let numArr = 1...100

let newNumArr = numArr.map(addFun)

print(newNumArr)


let account = Account()

account.addMoney(101)

let depositor = Account.addMoney

depositor(account)(101)

Account.addMoney(account)(101)

func curry<A, B, C>(f: (A, B) -> C) -> A -> B -> C {
    return { a in { b in f(a, b) } }
}

//let add = Calculator().curry(Calculator.add)(2)(3)

//交换字符数组中的两个字符
// 1.在swift中 数组和字典都是值传递，class 是引用传递 如果需要数组和字典都是引用传递，的用inout关键字修饰形参。
// 2.在swift中 函数的第一个参数是局部变量 ，其他之外多月的参数都是外面变量 需要调用函数的时候实参进行声明外部变量 但可以通过_ var ,这样外面调用函数就不需要声明
// 3.对于不需要修改的变量用let修饰，对于需要修改的变量用var修饰
func swap(inout arr:[Character],_ p:Int, _ q:Int){

    let temp = arr[p]
    
    arr[p] = arr[q]
    
    arr[q] = temp
    
}

var arr :[Character] = ["!","$"]

swap(&arr, 0, 1)//第一个参数类似于c的数组指针，相当于引用传递

print(arr)

//int数组进行排序

var numArr1:[Int] = [4,2,6,0,3];

var sortNum = numArr1.sort({$0<$1})

print(sortNum)

//字典的key排序

var dic :Dictionary = ["dfd":"1","fsdws":"3","adsa":"2"]

var keyArr = Array(dic.keys).sort({ $0 < $1 });

print(keyArr)

//字典中的value的规则进行key排序

let keys  = Array(dic.keys)

var valueArr = keys.sort({
    
    let value1 :String = dic[$0]!
    
    let value2 :String = dic[$1]!
    
    print(value1+"  "+value2)
    
    return value1 < value2
    
})

print(valueArr)




